const http = require('../../../utils/https.js');

Page({
    data: {
        flashSaleInfo: {}, // 商品 + 活动整体信息
        productImages: [], // 轮播图
        productDetail: '', // 富文本
        time: 0, // 倒计时总毫秒数
        timeData: {
            hours: 0,
            minutes: 0,
            seconds: 0
        },
        appraiseNum: 0,
        appraise: [],
        cartCount: 0
    },

    onLoad(options) {
        console.log('商品id', options.id);
        // 保存商品ID供后续使用
        this.productId = options.id;

        // 先获取商品详情，在其回调中再获取活动信息
        this.getFlashSaleDetail(options.id, () => {
            // 商品详情获取完成后再获取活动信息
            this.getActivityInfo(options.id);
        });
        // 获取评论可以并行
        this.getComments(options.id);
    },
    /**
     * 获取商品详情
     */
    getFlashSaleDetail(productId, callback) {
        wx.showLoading({
            title: '加载中...'
        });
        http.GET(
            '/product/productinfo/list', {
                id: productId
            },
            (res) => {
                wx.hideLoading();
                if (res.code === 200 && res.rows && res.rows.length > 0) {
                    const data = res.rows[0];

                    // 处理商品轮播图
                    let images = [];
                    if (data.productImages && data.productImages.length > 0) {
                        data.productImages.forEach(imgObj => {
                            if (imgObj.url) {
                                images = images.concat(imgObj.url.split(',').map(u => u.trim()));
                            }
                        });
                    } else {
                        images = [data.mainImage, data.image].filter(Boolean);
                    }

                    // 处理详情（核心修改点 ✅）
                    let detail = data.productDetail?.description || '<p>暂无详细介绍</p>';

                    // 给所有 img 添加样式，防止撑破屏幕
                    detail = detail.replace(
                        /<img/gi,
                        '<img style="max-width:100%;height:auto;display:block;"'
                    );

                    this.setData({
                        flashSaleInfo: data,
                        productImages: images,
                        productDetail: detail
                    });

                    if (typeof callback === 'function') {
                        callback();
                    }
                } else {
                    wx.showToast({
                        title: '获取商品信息失败',
                        icon: 'none'
                    });
                }
            },
            (err) => {
                wx.hideLoading();
                wx.showToast({
                    title: '网络请求失败',
                    icon: 'none'
                });
                console.error('获取商品详情失败:', err);
            }
        );
    },
    /**
     * 获取活动信息（用于倒计时 + 活动价 + 活动库存）
     */
    getActivityInfo(productId) {
        http.GET('/activity/sale/list', {
            productId
        }, (res) => {
            // 检查返回数据是否有效
            if (res.code === 200 && res.rows && res.rows.length > 0) {
                const act = res.rows[0];

                // 从activityType中获取结束时间
                const activityType = act.activityType || {};
                const endTimeStr = activityType.endTime;

                // 验证活动数据是否完整
                if (!act.flashPrice || !act.stock || !endTimeStr) {
                    console.error('活动数据不完整', act);
                    wx.showToast({
                        title: '活动信息获取不完整',
                        icon: 'none'
                    });
                    return;
                }

                // 处理时间格式
                console.log('从activityType获取的结束时间:', endTimeStr)
                let formattedEndTime = endTimeStr;
                if (formattedEndTime.length === 16) formattedEndTime += ':00'; // 补秒
                formattedEndTime = formattedEndTime.replace(/-/g, '/');

                // 时间格式验证
                const endTime = new Date(formattedEndTime).getTime();
                if (isNaN(endTime)) {
                    console.error('时间格式错误:', formattedEndTime);
                    wx.showToast({
                        title: '时间格式错误',
                        icon: 'none'
                    });
                    return;
                }

                const now = Date.now();
                const remainingTime = Math.max(endTime - now, 0);
                console.log('活动价:', act.flashPrice);

                // 更新数据，保存完整的活动信息
                this.setData({
                    flashSaleInfo: {
                        ...this.data.flashSaleInfo,
                        flashPrice: act.flashPrice,
                        stock: act.stock,
                        activityType: activityType, // 保存完整的活动类型对象
                        activityName: activityType.activityName || '',
                        endTime: endTimeStr, // 保存原始结束时间
                        formattedEndTime: formattedEndTime // 保存格式化后的结束时间
                    },
                    time: remainingTime,
                    timeData: this.getTimeData(remainingTime)
                }, () => {
                    console.log('更新后的活动结束时间:', this.data.flashSaleInfo.endTime);
                });
            } else {
                console.error('获取活动信息失败', res);
                wx.showToast({
                    title: '获取活动信息失败',
                    icon: 'none'
                });
            }
        }, (err) => {
            console.error('活动信息请求失败:', err);
            wx.showToast({
                title: '活动信息加载失败',
                icon: 'none'
            });
        });
    },

    // 辅助函数：格式化时间
    getTimeData(ms) {
        let totalSeconds = Math.floor(ms / 1000);
        const hours = String(Math.floor(totalSeconds / 3600)).padStart(2, '0');
        totalSeconds %= 3600;
        const minutes = String(Math.floor(totalSeconds / 60)).padStart(2, '0');
        const seconds = String(totalSeconds % 60).padStart(2, '0');
        return {
            hours,
            minutes,
            seconds
        };
    },

   /**
    * 获取评论
    */
   getComments(productId) {
       http.GET(
           '/comment/comments/list', {
               productId
           },
           (res) => {
               if (res.code === 200 && res.rows) {
                   // 先过滤掉orderId为null的评论
                   const validComments = res.rows.filter(comment => comment.orderId !== null);
                   // 从过滤后的有效评论中取前3条
                   const limitedRows = validComments.slice(0, 3);

                   const comments = limitedRows.map(comment => {
                       let imgUrls = [];
                       if (comment.imageUrls) {
                           imgUrls = comment.imageUrls.split(',').map(url => url.trim());
                       } else if (comment.imageUrlList && comment.imageUrlList.length > 0) {
                           imgUrls = comment.imageUrlList;
                       }
                       return {
                           avatarUrl: comment.avatar || 'https://xxx/default.png',
                           name: comment.userName || '匿名用户',
                           time: comment.createdAt || '',
                           score: comment.rating || 5,
                           text: comment.content || '',
                           imgUrls
                       };
                   });

                   // 使用过滤后的有效评论总数
                   this.setData({
                       appraise: comments,
                       appraiseNum: validComments.length
                   });
               } else {
                   wx.showToast({
                       title: '获取评论失败',
                       icon: 'none'
                   });
               }
           },
           (err) => {
               wx.showToast({
                   title: '评论加载失败',
                   icon: 'none'
               });
               console.error('获取评论失败:', err);
           }
       );
   },
    // 倒计时回调
    onChange(e) {
        this.setData({
            timeData: e.detail
        });
    },

    toviews(e) {
        const productId = this.data.flashSaleInfo.id;
        wx.navigateTo({
            url: `/index/pages/mzhGoodsReviews/mzhGoodsReviews?productId=${productId}`,
        });
    },

    onPullDownRefresh() {
        if (this.productId) {
            // 重新加载时保持正确的顺序
            this.getFlashSaleDetail(this.productId, () => {
                this.getActivityInfo(this.productId);
            });
            this.getComments(this.productId);
        }
        wx.stopPullDownRefresh();
    },

    onClickIcon() {
        wx.switchTab({
            url: '/pages/shopCart/shopCart',
        })
    },

    onClickButton() {
        // 从本地缓存获取用户信息
        const userInfo = wx.getStorageSync('userInfo');
        if (!userInfo || !userInfo.userId) {
            wx.showToast({
                title: '请先登录',
                icon: 'none'
            });
            return;
        }

        // 获取商品信息和活动信息
        const {
            flashSaleInfo
        } = this.data;
        const productId = flashSaleInfo.id;

        if (!productId) {
            wx.showToast({
                title: '商品信息有误',
                icon: 'none'
            });
            return;
        }

        // 获取商品价格（优先使用活动价）
        const price = flashSaleInfo.flashPrice || flashSaleInfo.price;
        if (!price) {
            wx.showToast({
                title: '商品价格信息有误',
                icon: 'none'
            });
            return;
        }

        // 从activityType中获取endTime作为cutoffTime
        const cutoffTime = flashSaleInfo.activityType?.endTime;
        if (!cutoffTime) {
            console.error('未从activityType中获取到endTime');
            wx.showToast({
                title: '活动时间信息有误',
                icon: 'none'
            });
            return;
        }

        // 准备请求参数
        const params = {
            userId: userInfo.userId,
            productId: productId,
            quantity: 1,
            price: price,
            cutoffTime: cutoffTime // 使用从activityType获取的endTime
        };

        console.log('提交的参数:', params); // 调试用

        // 显示加载提示
        wx.showLoading({
            title: '加入购物车中...'
        });

        // 发送请求加入购物车
        http.POST(
            '/order/items',
            params,
            (res) => {
                wx.hideLoading();
                if (res.code === 200) {
                    wx.showToast({
                        title: '加入购物车成功',
                        icon: 'success'
                    });
                      // 👇 加入购物车成功后，更新 cartCount
                      this.setData({
                          cartCount: this.data.cartCount + 1
                      });
                } else {
                    wx.showToast({
                        title: res.msg || '加入购物车失败',
                        icon: 'none'
                    });
                }
            },
            (err) => {
                wx.hideLoading();
                wx.showToast({
                    title: '网络错误，加入失败',
                    icon: 'none'
                });
                console.error('加入购物车失败:', err);
            }
        );
    },
     /**
      * 生命周期函数--监听页面显示
      */
     onShow() {
         const userInfo = wx.getStorageSync('userInfo');
         if (userInfo && userInfo.userId) {
             http.GET(`/order/items/user/${userInfo.userId}`, {}, (res) => {
                 if (res.code === 200) {
                     let total = 0;
                     res.data.forEach(item => {
                         total += item.quantity;
                     });
                     this.setData({
                         cartCount: total
                     });
                 }
             });
         }
     },
});
